package com.company.finance.ddd.domain.core.bill.aggregate.assembler;

import com.company.finance.ddd.domain.core.bill.aggregate.BillAggregate;
import com.company.finance.ddd.domain.core.voucher.aggregate.Voucher;
import com.company.finance.ddd.domain.core.voucher.rule.BillItemRule;

import java.util.List;

/**
 * 依据会计学科的复式记账法，为一个单据的每条明细记录生成2条凭证明细，即单据明细与会计明细的数量比为1:2。
 * @author wanglei
 */
public interface ItemAssembler {

    /**
     * 根据会计凭证生成规则和Bill明细记录装备凭证明细
     * @param billItemRule 会计凭证生成规则
     * @param billAggregate 表单聚合
     * @return 会计凭证明细
     */
    List<Voucher.VoucherItem> assemble(BillItemRule billItemRule, BillAggregate billAggregate);
}
